package com.qdu.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
//定义一个方面类，包含次要业务逻辑

@Component
@Aspect
public class LogAspect {

    //声明一个切入点
    @Pointcut("execution(* com.qdu.dao.*.*(..))")
    private void logPointcut() {
    }

    //对于环绕通知,一般使用ProceedingJoinPoint,可控制目标方法是否执行
    @Around("logPointcut()")
    public void logAround(ProceedingJoinPoint p) throws Throwable {
        //这里的环绕通知功能类似前置通知+返回后通知
        System.out.println("----调用目标方法前,当前方法:" + p.getSignature().getName());
        p.proceed(); //默认拦截了目标方法的执行,proceed()调用目标方法
        System.out.println("----调用目标方法后,当前方法:" + p.getSignature().getName());
    }
}
